Java匿名内部类与Lambda表达式 |
您所在的位置:网站首页 › java lambda表达式与匿名内部类的联系和区别 › Java匿名内部类与Lambda表达式 |
匿名内部类
匿名内部类的作用是提供便捷的接口实现。在一些情况下,方法会使用接口作为参数,此时通过创建类并实现接口进行参数的传递。但是,有时候该类只需创建一次,如果用传统的创建类并实现接口的方法过于繁琐,因此用匿名类可以用匿名内部类实现。 例如,Arrays.sort()中,重写比较器,就可以通过匿名内部类来实现。 public class Test { public static void main(String[] args) { Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6}; //重写Comparator类中的compare方法 Cmp cmp = new Cmp(); Arrays.sort(nums, cmp); System.out.println(Arrays.toString(nums)); } static class Cmp implements Comparator { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } } }在未使用匿名内部类的情况下,需要创建新的类。 public class Test { public static void main(String[] args) { Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6}; //重写Comparator类中的compare方法 Arrays.sort(nums,new Comparator(){ //匿名内部类 @Override public int compare(Integer o1, Integer o2) { return o2-o1; } }); System.out.println(Arrays.toString(nums)); } }当使用匿名内部类后就无需再创建类,大大简化了代码。 Lambda表达式Lambda表达式为接口中抽象方法的实现,其作用是简化匿名内部类实现代码作为方法接口实现参数的传递。 Lambda表达式语法 ()->{} 或者 (参数)->{}例如,在Arrays.sort()中 public class Test { public static void main(String[] args) { Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6}; //Lambda表达式重写Comparator类中的compare方法 Arrays.sort(nums, ((o1, o2) -> (o2 - o1))); System.out.println(Arrays.toString(nums)); } }Lambda表达式也有局限性,对于一个类中有多个抽象方法时,就不能使用Lambda表达式。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |